package com.bamboo.pistorage.provider;

import com.bamboo.model.enums.COSBucketEnum;
import com.bamboo.pistorage.domain.DeleteResultEntity;
import com.bamboo.pistorage.domain.UploadParamEntity;
import com.bamboo.pistorage.domain.UploadResultEntity;

import java.util.List;

/**
 * @param <T> 返回的结果的额外信息的类型
 * @description 对象存储服务提供者
 * @date 2025/3/26 16:19
 * @author chenzh
 */
public interface ICosProvider<T> {
    /**
     * @description 上传文件到cos
     * @date 2025/3/26 16:17
     * @author chenzh
     * @param uploadParam 删除参数
     * @return UploadResultEntity<T>
     */
    UploadResultEntity<T> upload(UploadParamEntity uploadParam);

    /**
     * @description 删除文件
     * @date 2025/3/27 下午3:51
     * @author chenzh
     * @param bucketEnum 存储桶信息
     * @param key 文件key
     */
    DeleteResultEntity deleteOne(COSBucketEnum bucketEnum, String key);

    /**
     * @description 批量删除文件
     * @date 2025/3/27 下午3:52
     * @author chenzh
     * @param bucketEnum 存储桶信息
     * @param keys 文件key列表
     */
    DeleteResultEntity deleteAll(COSBucketEnum bucketEnum, List<String> keys);

    /**
     * @description 根据上传的文件key获取访问url
     * @date 2025/3/26 16:18
     * @author chenzh
     * @param bucketEnum 存储桶信息
     * @param objectKey 上传成功的文件key
     * @return String
     */
    String getObjectUrl(COSBucketEnum bucketEnum, String objectKey);
}
